using CodeSaude.Domain.Entities;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;

namespace CodeSaude.Infrastructure.Data.EntityConfig
{
    public class ProntuarioAvaliacaoMap : EntityTypeConfiguration<ProntuarioAvaliacao>
    {
        public ProntuarioAvaliacaoMap()
        {
            // Primary Key
            this.HasKey(t => new { t.ProntuarioAvaliacaoId, t.IdRegistro });

            // Properties
            this.Property(t => t.ProntuarioAvaliacaoId)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

            this.Property(t => t.IdRegistro)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

            this.Property(t => t.PressaoMinAvaliacao)
                .HasMaxLength(6);

            this.Property(t => t.PressaoMaxAvaliacao)
                .HasMaxLength(6);

            this.Property(t => t.PulsoAvaliacao)
                .HasMaxLength(6);

            this.Property(t => t.FrequenciaRespiratoriaAvaliacao)
                .HasMaxLength(6);

            this.Property(t => t.SatOxigAvaliacao)
                .HasMaxLength(6);

            this.Property(t => t.HemoglocoseAvaliacao)
                .HasMaxLength(6);

            this.Property(t => t.FlagLocal)
                .HasMaxLength(3);

            // Table & Column Mappings
            this.ToTable("prontuario_avaliacao");
            this.Property(t => t.ProntuarioAvaliacaoId).HasColumnName("id_avaliacao");
            this.Property(t => t.IdRegistro).HasColumnName("id_registro");
            this.Property(t => t.IdEspecialidade).HasColumnName("id_especialidade");
            this.Property(t => t.PesoAvaliacao).HasColumnName("peso_avaliacao");
            this.Property(t => t.AlturaAvaliacao).HasColumnName("altura_avaliacao");
            this.Property(t => t.PressaoMinAvaliacao).HasColumnName("pressao_min_avaliacao");
            this.Property(t => t.PressaoMaxAvaliacao).HasColumnName("pressao_max_avaliacao");
            this.Property(t => t.PulsoAvaliacao).HasColumnName("pulso_avaliacao");
            this.Property(t => t.FrequenciaRespiratoriaAvaliacao).HasColumnName("freq_resp_avaliacao");
            this.Property(t => t.TemperaturaAvaliacao).HasColumnName("temperatura_avaliacao");
            this.Property(t => t.SatOxigAvaliacao).HasColumnName("sat_oxig_avaliacao");
            this.Property(t => t.HemoglocoseAvaliacao).HasColumnName("hemoglicose_avaliacao");
            this.Property(t => t.FlagLocal).HasColumnName("flag_local");
            this.Property(t => t.IdEvolucao).HasColumnName("id_evolucao");
            this.Property(t => t.GlasgowAvaliacao).HasColumnName("glasgow_avaliacao");

            // Relationships
            this.HasRequired(t => t.Prontuario)
                .WithMany(t => t.ListaProntuarioAvaliacao)
                .HasForeignKey(d => new { d.IdRegistro, d.IdEspecialidade });

        }
    }
}
